// run

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// Test method invocation with pointer receivers and function-valued fields.

package main

type C struct {
	a int
	x func(p *C) int
}

func (this *C) f() int {
	return this.a
}

func main() {
	var v int
	var c *C

	c = new(C)
	c.a = 6
	c.x = g

	v = g(c)
	if v != 6 {
		panic(v)
	}

	v = c.x(c)
	if v != 6 {
		panic(v)
	}

	v = c.f()
	if v != 6 {
		panic(v)
	}
}

func g(p *C) int {
	var v int

	v = p.a
	if v != 6 {
		panic(v)
	}
	return p.a
}
